package com.allways.dubbo.mdm.service.questionnaireTask.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.allways.dubbo.mdm.beans.DataChangeLog;
import com.allways.dubbo.mdm.exception.MdmException;
import com.allways.dubbo.mdm.exception.MdmExceptionCode;
import com.allways.dubbo.mdm.service.BaseDataUtils;
import com.allways.dubbo.mdm.service.log.IDataChangeLogService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;
import com.allways.dubbo.base.dao.MdmBaseDaoImpl;
import com.allways.dubbo.mdm.beans.questionnaireTask.QuestionnaireTask;
import com.allways.dubbo.mdm.service.questionnaireTask.IQuestionnaireTaskService;

/**
 * <p>ClassName: IQuestionnaireTaskService</p>
 * <p>Description: 调查问卷任务Service接口</p>
 * <p>Author: weih</p>
 * <p>Date: 2017-05-23</p>
 */
@Service("mdmQuestionnaireTaskService")
public class QuestionnaireTaskServiceImpl extends MdmBaseDaoImpl implements IQuestionnaireTaskService {
	Log log = LogFactory.getLog(QuestionnaireTaskServiceImpl.class);

    @Autowired
    BaseDataUtils baseDataUtils;
    
     @Autowired
    IDataChangeLogService dataChangeLogService;
    
    @Override
    public int addQuestionnaireTask(QuestionnaireTask questionnaireTask) {
   		log.debug("For the new questionnaireTask parameters:"+ questionnaireTask.toJson());
   		validColumnLen(questionnaireTask);
    	
        //无code的不能插入
        if(StringUtils.isEmpty(questionnaireTask.getQuestionnaireTaskCode())){
            throw new MdmException(MdmExceptionCode.CODE_IS_EMPTY,null);
        }
        //code重复的不允许插入
        if(null != getQuestionnaireTaskByCode(questionnaireTask.getQuestionnaireTaskCode())){
            throw new MdmException(MdmExceptionCode.CODE_REPEATED,null);
        }
        
        int cnt=insert("questionnaireTask.insertQuestionnaireTask",questionnaireTask);
        
        /*数据变更日志*/
        DataChangeLog datalog = new DataChangeLog();
        datalog.setDataType(DataChangeLog.DataType.questionnaireTask.getName());
        datalog.setDataPk(questionnaireTask.getQuestionnaireTaskId().toString());
        datalog.setModifyType(DataChangeLog.OPER_TYPE_ADD);
        dataChangeLogService.addDataChangeLog(datalog);
        
        return cnt;
    }

    @Override
    public int updateQuestionnaireTask(QuestionnaireTask questionnaireTask) {
    	log.debug("Update for the questionnaireTask parameters:"+ questionnaireTask.toJson());
    	validColumnLen(questionnaireTask);
     	//无code的不能更新
        if(StringUtils.isEmpty(questionnaireTask.getQuestionnaireTaskCode())){
            throw new MdmException(MdmExceptionCode.CODE_IS_EMPTY,null);
        }
        //code记录不存在
        QuestionnaireTask oldQuestionnaireTask = getQuestionnaireTaskByCode(questionnaireTask.getQuestionnaireTaskCode());
        if(null == oldQuestionnaireTask){
            throw new MdmException(MdmExceptionCode.UNKNOWNED_RESULT,null);
        }
		oldQuestionnaireTask.setQtaskId(questionnaireTask.getQtaskId());
		oldQuestionnaireTask.setQnId(questionnaireTask.getQnId());
		oldQuestionnaireTask.setMemberId(questionnaireTask.getMemberId());
		oldQuestionnaireTask.setCompanyId(questionnaireTask.getCompanyId());
		oldQuestionnaireTask.setCompanyName(questionnaireTask.getCompanyName());
		oldQuestionnaireTask.setBrandCode(questionnaireTask.getBrandCode());
		oldQuestionnaireTask.setBrandName(questionnaireTask.getBrandName());
		oldQuestionnaireTask.setProvinceCode(questionnaireTask.getProvinceCode());
		oldQuestionnaireTask.setProvinceName(questionnaireTask.getProvinceName());
		oldQuestionnaireTask.setCityCode(questionnaireTask.getCityCode());
		oldQuestionnaireTask.setCityName(questionnaireTask.getCityName());
		oldQuestionnaireTask.setSaleArea(questionnaireTask.getSaleArea());
		oldQuestionnaireTask.setAssignTime(questionnaireTask.getAssignTime());
		oldQuestionnaireTask.setUserName(questionnaireTask.getUserName());
		oldQuestionnaireTask.setMobileNum(questionnaireTask.getMobileNum());
		oldQuestionnaireTask.setUserJob(questionnaireTask.getUserJob());
		oldQuestionnaireTask.setUserJobTime(questionnaireTask.getUserJobTime());
		oldQuestionnaireTask.setIfDone(questionnaireTask.getIfDone());
		oldQuestionnaireTask.setDoneTime(questionnaireTask.getDoneTime());
		oldQuestionnaireTask.setDeleteMark(questionnaireTask.getDeleteMark());
		oldQuestionnaireTask.setCreateUser(questionnaireTask.getCreateUser());
		oldQuestionnaireTask.setCreateTime(questionnaireTask.getCreateTime());
		oldQuestionnaireTask.setUpdateUser(questionnaireTask.getUpdateUser());
		oldQuestionnaireTask.setUpdateTime(questionnaireTask.getUpdateTime());
        
        int cnt= update("questionnaireTask.updateQuestionnaireTask",oldQuestionnaireTask);
        /*数据变更日志*/
        DataChangeLog datalog = new DataChangeLog();
        datalog.setDataType(DataChangeLog.DataType.QuestionnaireTask.getName());
        datalog.setDataPk(oldQuestionnaireTask.getQuestionnaireTaskId().toString());
        datalog.setModifyType(DataChangeLog.OPER_TYPE_EDIT);
        dataChangeLogService.addDataChangeLog(datalog);
        
        return cnt;
    }

    @Override
    public int deleteQuestionnaireTask(QuestionnaireTask questionnaireTask) {
    	log.debug("Delete for the questionnaireTask parameters:"+ questionnaireTask.toJson());
    	 
        //数据来源不明的不能操作
        if(!baseDataUtils.isDataSourceAvailable(questionnaireTask.getDataSource())){
            throw new MdmException(MdmExceptionCode.UNKNOWNED_DATASOURCE,null);
        }
     	//无code的不能删除
        if(StringUtils.isEmpty(questionnaireTask.getQuestionnaireTaskCode())){
            throw new MdmException(MdmExceptionCode.CODE_IS_EMPTY,null);
        }
        QuestionnaireTask fullQuestionnaireTask = getQuestionnaireTaskByCode(questionnaireTask.getQuestionnaireTaskCode());
        
        /* 数据变更日志 */
        DataChangeLog datalog = new DataChangeLog();
        datalog.setDataType(DataChangeLog.DataType.QuestionnaireTask.getName());
        datalog.setDataPk(fullQuestionnaireTask.getQuestionnaireTaskId().toString());
        datalog.setModifyType(DataChangeLog.OPER_TYPE_DELETE);
        dataChangeLogService.addDataChangeLog(datalog);
        
        return delete("questionnaireTask.deleteQuestionnaireTask",questionnaireTask);
    }

    @Override
    public QuestionnaireTask getQuestionnaireTaskByCode(String code) {
    	log.debug("Query for questionnaireTask code:" + code);
        return queryForObject("questionnaireTask.getQuestionnaireTaskByCode",code);
    }
    @Override
    public long getQuestionnaireTaskCount(QuestionnaireTask questionnaireTask) {
    	log.debug("Query for questionnaireTask count parameters:" + questionnaireTask.toJson());
        return queryForObject("questionnaireTask.getQuestionnaireTaskCount",questionnaireTask);
    }
   @Override
    public List<QuestionnaireTask> queryQuestionnaireTasks(QuestionnaireTask questionnaireTask, int firstRow, int lastRow) {
      	log.debug("Query for questionnaireTask parameters:" + questionnaireTask.toJson()+"\r\n,Page parameters:["+firstRow+","+lastRow+"]");
        if(firstRow<0 || firstRow>lastRow || lastRow<0){
            throw new RuntimeException("Digital is not logical");
        }
        if(lastRow-firstRow > MAX_RETURN_NUM){
            lastRow = firstRow + MAX_RETURN_NUM;
        }
        Map<String ,Object> param = new HashMap<String,Object>();
        param.put("questionnaireTask",questionnaireTask);
        param.put("firstRow",firstRow);
        param.put("rowSize",lastRow-firstRow);
        return queryList("questionnaireTask.queryQuestionnaireTasks", param);
    }
    
    /**
     * 验证字段长度
     * @param questionnaireTask 需要验证的对象
     */
    private void validColumnLen(QuestionnaireTask questionnaireTask){
		if(!StringUtils.isEmpty(questionnaireTask.getQtaskId()) && questionnaireTask.getQtaskId().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getQnId()) && questionnaireTask.getQnId().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getMemberId()) && questionnaireTask.getMemberId().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCompanyId()) && questionnaireTask.getCompanyId().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCompanyName()) && questionnaireTask.getCompanyName().length()>50){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{50},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getBrandCode()) && questionnaireTask.getBrandCode().length()>40){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{40},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getBrandName()) && questionnaireTask.getBrandName().length()>100){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{100},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getProvinceCode()) && questionnaireTask.getProvinceCode().length()>10){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{10},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getProvinceName()) && questionnaireTask.getProvinceName().length()>50){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{50},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCityCode()) && questionnaireTask.getCityCode().length()>10){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{10},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCityName()) && questionnaireTask.getCityName().length()>50){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{50},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getSaleArea()) && questionnaireTask.getSaleArea().length()>50){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{50},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getAssignTime()) && questionnaireTask.getAssignTime().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getUserName()) && questionnaireTask.getUserName().length()>20){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{20},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getMobileNum()) && questionnaireTask.getMobileNum().length()>15){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{15},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getUserJob()) && questionnaireTask.getUserJob().length()>20){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{20},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getUserJobTime()) && questionnaireTask.getUserJobTime().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getIfDone()) && questionnaireTask.getIfDone().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getDoneTime()) && questionnaireTask.getDoneTime().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getDeleteMark()) && questionnaireTask.getDeleteMark().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCreateUser()) && questionnaireTask.getCreateUser().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getCreateTime()) && questionnaireTask.getCreateTime().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getUpdateUser()) && questionnaireTask.getUpdateUser().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
		if(!StringUtils.isEmpty(questionnaireTask.getUpdateTime()) && questionnaireTask.getUpdateTime().length()>0){
            throw new MdmException(MdmExceptionCode.LENGTH_OUT_OF_RANGE,new Object[]{0},null);
        }
        
        //数据来源不明的不能操作
        if(!baseDataUtils.isDataSourceAvailable(questionnaireTask.getDataSource())){
            throw new MdmException(MdmExceptionCode.UNKNOWNED_DATASOURCE,null);
        }
    }
    
}
